package cliente.apartamento;

import java.awt.Container;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.util.Vector;

import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;

import mensagens.EnviaDados;
import mensagens.ManterTipoApartamento;
import mensagens.Mensagem;

@SuppressWarnings("serial")
public class CadastraApartamento extends AbstractAction{
	
	private Action executaCadastraApartamento;

	private JFrame tfCadastraApartamento;
	private JLabel lNumAp, lTipoAp;
	private JTextField tNumAp;
	private JComboBox ctipoAp;
	private JButton bInsere, bFecha;
	private Vector<String> tipoAps;
	
	public CadastraApartamento() {
		super("Cadastrar Apartamento");
		this.putValue(Action.SHORT_DESCRIPTION, "Cadastra um Apartamento no sistema");
		setExecutaCadastraApartamento(new ExecutaCadastraApartamento());
		setTipoAps(null);
	}

	@Override
	public void actionPerformed(ActionEvent arg0) {
		// Cria um novo Frame
		setTfCadastraApartamento(new JFrame("Cadastrar Apartamento"));
		// Seta operação padrão de fechar o frame
		getTfCadastraApartamento().setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		// Seta o container interno
		Container interno = getTfCadastraApartamento().getContentPane();
		// Ajusta o layout do Frame para um GridBagLayout
		GridBagConstraints cons = new GridBagConstraints();
		GridBagLayout layout = new GridBagLayout();
		interno.setLayout(layout);
		// Seta uma borda de 2px entre cada elemento do frame
		cons.insets = new Insets(2,2,2,2);
		
		// Componentes do Frame
		
		// Label do numero do apartamento
		setlNumAp(new JLabel("Número do Apartamento"));
		cons.weightx	= 0.5;
		cons.fill		= GridBagConstraints.NONE;
		cons.gridx		= 0;
		cons.gridy		= 0;
		interno.add(getlNumAp(), cons);
		
		// Texto do numero do apartamento
		settNumAp(new JTextField());
		cons.weightx	= 0.5;
		cons.fill		= GridBagConstraints.HORIZONTAL;
		cons.gridx		= 1;
		cons.gridy		= 0;
		interno.add(gettNumAp(), cons);
		
		// Label do tipo de apartamento
		setlTipoAp(new JLabel("Tipo de Apartamento"));
		cons.weightx	= 0.5;
		cons.fill		= GridBagConstraints.NONE;
		cons.gridx		= 0;
		cons.gridy		= 1;
		interno.add(getlTipoAp(), cons);
		
		// Le do banco a lista de tipos de apartamento
		ManterTipoApartamento mta = new ManterTipoApartamento(2);
		Mensagem resposta = EnviaDados.enviarMensagem(mta);
		if(resposta instanceof ManterTipoApartamento){
			mta = (ManterTipoApartamento) resposta;
		} else {
			System.out.println("Tipo de mensagem errada recebido!");
			return;
		}
		
		setTipoAps(new Vector<String>(mta.getV().size()));
		for(int k=0; k < mta.getV().size(); k++){
			getTipoAps().add(mta.getV().get(k).getDescricao());
		}
		
		// Combo do tipo de apartamento
		setCtipoAp(new JComboBox(getTipoAps()));
		cons.weightx	= 0.5;
		cons.fill		= GridBagConstraints.HORIZONTAL;
		cons.gridx		= 1;
		cons.gridy		= 1;
		getCtipoAp().setSelectedIndex(0);
		interno.add(getCtipoAp(), cons);
		
		getTfCadastraApartamento().setSize(300, 200);
		getTfCadastraApartamento().setVisible(true);
	}

	public Action getExecutaCadastraApartamento() {
		return executaCadastraApartamento;
	}

	public void setExecutaCadastraApartamento(Action executaCadastraApartamento) {
		this.executaCadastraApartamento = executaCadastraApartamento;
	}

	public JFrame getTfCadastraApartamento() {
		return tfCadastraApartamento;
	}

	public void setTfCadastraApartamento(JFrame tfCadastraApartamento) {
		this.tfCadastraApartamento = tfCadastraApartamento;
	}

	public JLabel getlNumAp() {
		return lNumAp;
	}

	public void setlNumAp(JLabel lNumAp) {
		this.lNumAp = lNumAp;
	}

	public JLabel getlTipoAp() {
		return lTipoAp;
	}

	public void setlTipoAp(JLabel lTipoAp) {
		this.lTipoAp = lTipoAp;
	}

	public JTextField gettNumAp() {
		return tNumAp;
	}

	public void settNumAp(JTextField tNumAp) {
		this.tNumAp = tNumAp;
	}

	public JButton getbInsere() {
		return bInsere;
	}

	public void setbInsere(JButton bInsere) {
		this.bInsere = bInsere;
	}

	public JButton getbFecha() {
		return bFecha;
	}

	public void setbFecha(JButton bFecha) {
		this.bFecha = bFecha;
	}

	public void setCtipoAp(JComboBox ctipoAp) {
		this.ctipoAp = ctipoAp;
	}

	public JComboBox getCtipoAp() {
		return ctipoAp;
	}
	
	public Vector<String> getTipoAps() {
		return tipoAps;
	}

	public void setTipoAps(Vector <String> tipoAps) {
		this.tipoAps = tipoAps;
	}

}
